#include "dir.h"

int DirRetrieval( const char * DirPath , const char * Type , P_Node_t head )
{
	printf("正在检索【%s】目录..\n" , DirPath);

	// 打开指定目录
	DIR * dp = opendir( DirPath );
	if (dp == NULL)
	{
		fprintf( stderr , "open [%s] dir error:%s\n" , DirPath , strerror(errno) );
		return 0 ;
	}
	
	int count = 0 ;
	char NewPath [257] = {0};

	while (1)
	{
		// 读取目录项
		struct dirent* dirInfo = readdir(dp);
		if (dirInfo == NULL)
		{
			break; 
		}
		

		// 判断当前目录项的文件类型
		if ( dirInfo->d_type == 8 )
		{
			// 如果是普通文件
			char * tmp = strrchr(dirInfo->d_name , '.');
			if (tmp == NULL)
			{
				continue;
			}
			
			if ( strcmp(tmp , Type) == 0 )
			{
				// 获得新数据
				snprintf( NewPath , sizeof(NewPath) ,"%s%s" , DirPath , dirInfo->d_name);

				dataType newData ;
				strncpy( newData.FilePath , NewPath , 512 );
				newData.Type = Type[1]; 

				// 获得新节点
				P_Node_t newNode = InitNewNode( &newData );

				// 添加到链表
				Add2ListTail(head , newNode);

				printf("--[%s]\n" , NewPath );
				count ++ ;
			}
			
		}
		else if ( dirInfo->d_type == 4 &&
					strcmp(dirInfo->d_name , "." ) &&
					strcmp(dirInfo->d_name , ".." )  )
		{
			// strcat(  );
			snprintf( NewPath , sizeof(NewPath) ,"%s%s/" , DirPath , dirInfo->d_name);

			// 如果是目录文件
			count +=  DirRetrieval( NewPath ,  Type , head );
		}
		
	}
	
	return count ;

}